from pyhtml import *
import json

# 存储声音列表信息的json的位置
json_dir = 'json/voice.json'
# html文件存放位置
page_dir = 'page/'
# 选择分类标签
type_str = ''
# 生成的文件名
page_to = ''
# 切换方式时的目标文件名
change_to = ''
# 标题名字
html_title = '度按钮'
# 列表初始化
cate_list = []


def read_json():
    file = open(json_dir, 'r')
    json_str = file.read()
    file.close()

    json_array = json.loads(json_str)
    global obj_count
    obj_count = len(json_array)
    return json_array


# 根据标签获得分类
def cate_tag(json_array):
    for json_obj in json_array:
        if json_obj[type_str] not in cate_list:
            cate_list.append(json_obj[type_str])
    cate_list.sort()
    # print(cate_list)


# 音频元素列表
def audio_list(json_array):
    for json_obj in json_array:
        yield audio(src="voices/" + json_obj['file'], id=json_obj['file'], controls="controls", hidden="true")


# 声音按钮
def voices_list(the_cate):
    cate_temp = []
    for json_obj in my_json:
        if json_obj[type_str] == the_cate:
            cate_temp.append(json_obj.copy())
    for json_obj in cate_temp:
        yield button(onclick='clickPlay(\'' + json_obj['file'] + '\')', id="voice_btn")(json_obj['name'])


# 声音列表的框
def voice_box(ctx):
    for cate_one in cate_list:
        yield div(id="voice_box")(h2(cate_one), voices_list(cate_one))


# 主体和输出
def out():
    t = html(
        head(
            title(html_title),
            script(src="script.js"),
            link(href="style.css", rel="stylesheet", type="text/css")
        ),
        body(
            script('var n_name=\'\''),
            header(
                table(
                    tr(
                        td(img(src='logo.png')),
                        td(
                            h1(html_title),
                            a(href=change_to)(button(id="bili_link")("当前分类方式：" + type_str)),
                            button(id="play_btn", onclick='changePlay()', value=1)("当前播放方式：单次播放")
                        ),
                    ),
                )
            ),
            div(audio_list(my_json)),
            div(id="voice_box")(
                table(
                    td(
                        img(id="head_icon", src='TBBT.png'),
                    ),
                    td(
                        h3("度人Tabibito"),
                        p(id="intro")(
                            p("VirtuaReal所属虚拟牌手，主要领域为影之诗和万智牌，涉猎炉石传说等一系列卡牌游戏。喜欢智力游戏、解谜游戏。"),
                            p("正在寻找过去的记忆，时不时会在直播中想起来。"),
                            p("萌音教主，对萌音很有造诣，甚至自己也能发出萌音（大雾）"),
                        ),
                        a(href="https://space.bilibili.com/474369808")(button(id="bili_link")("B站主页")),
                    )
                )
            ),
            div(voice_box),
            footer(
                a(href="https://space.bilibili.com/484300168")(button(id="bili_link")("度人的数据风暴")),
                a(href="https://gitee.com/softcream/py-voices-btn")(button(id="bili_link")("项目开源仓库：Gitee")),
            )
        )
    )

    file = open('page/' + page_to, 'w')
    file.write(t.render(user='Cenk'))
    file.close()
    cate_list.clear()


my_json = read_json()


def main():
    global type_str
    global page_to
    global change_to

    # 第一种分类方式
    type_str = 'cate'
    page_to = 'index.html'
    change_to = 'voice_date.html'
    cate_tag(my_json)
    out()
    # print('第一阶段')
    # 第二种分类方式
    type_str = 'date'
    page_to = 'voice_date.html'
    change_to = 'index.html'
    cate_tag(my_json)
    out()


if __name__ == '__main__':
    main()
